home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 2 / Amiga Tools 2.iso / dfue / elcheapofax / printers / rcs / ctransfer.c,v < prev    next >
Text File  |  1995-03-09  |  4KB  |  139 lines

  1. head    1.2;
  2. access;
  3. symbols
  4.     OCT93:1.2;
  5. locks;
  6. comment    @ * @;
  7.  
  8.  
  9. 1.2
  10. date    93.06.11.16.29.21;    author Rhialto;    state Exp;
  11. branches;
  12. next    1.1;
  13.  
  14. 1.1
  15. date    93.06.11.15.08.07;    author Rhialto;    state Exp;
  16. branches;
  17. next    ;
  18.  
  19.  
  20. desc
  21. @C version of transfer.asm for debugging purposes
  22. @
  23.  
  24.  
  25. 1.2
  26. log
  27. @First real RCS checkin
  28. @
  29. text
  30. @/* $Id$
  31.  * $Log$
  32.  */
  33. /*
  34.  * Copyright (c) 1992 Commodore-Amiga, Inc.
  35.  *
  36.  * This example is provided in electronic form by Commodore-Amiga, Inc. for
  37.  * use with the "Amiga ROM Kernel Reference Manual: Devices", 3rd Edition,
  38.  * published by Addison-Wesley (ISBN 0-201-56775-X).
  39.  *
  40.  * The "Amiga ROM Kernel Reference Manual: Devices" contains additional
  41.  * information on the correct usage of the techniques and operating system
  42.  * functions presented in these examples.  The source and executable code
  43.  * of these examples may only be distributed in free electronic form, via
  44.  * bulletin board or as part of a fully non-commercial and freely
  45.  * redistributable diskette.  Both the source and executable code (including
  46.  * comments) must be included, without modification, in any copy.  This
  47.  * example may not be published in printed form or distributed with any
  48.  * commercial product.    However, the programming techniques and support
  49.  * routines set forth in these examples may be used in the development
  50.  * of original executable software products for Commodore Amiga computers.
  51.  *
  52.  * All other rights reserved.
  53.  *
  54.  * This example is provided "as-is" and is subject to change; no
  55.  * warranties are made.  All use is at your own risk. No liability or
  56.  * responsibility is assumed.
  57.  *
  58.  ****************************************************************************
  59.  *
  60.  *    Example transfer routine for HP_LaserJet driver.
  61.  *
  62.  *    Transfer() should be written in assembly code for speed
  63.  */
  64.  
  65. #include "defs.h"
  66.  
  67. Prototype void Transfer(PrtInfo *, UWORD, UBYTE *);
  68.  
  69. void
  70. Transfer(PInfo, y, ptr)
  71. struct PrtInfo *PInfo;
  72. UWORD y;    /* row # */
  73. UBYTE *ptr;    /* ptr to buffer */
  74. {
  75.     static UBYTE bit_table[] = {128, 64, 32, 16, 8, 4, 2, 1};
  76.     UBYTE *dmatrix, Black, dvalue, threshold;
  77.     union colorEntry *ColorInt;
  78.     UWORD x, width, sx, *sxptr, bit;
  79.  
  80.     /* pre-compute */
  81.     /* printer non-specific, MUST DO FOR EVERY PRINTER */
  82.     x = PInfo->pi_xpos; /* get starting x position */
  83.     ColorInt = PInfo->pi_ColorInt; /* get ptr to color intensities */
  84.     sxptr = PInfo->pi_ScaleX;
  85.     width = PInfo->pi_width; /* get # of source pixels */
  86.  
  87.     /* pre-compute threshold; are we thresholding? */
  88.     if (threshold = PInfo->pi_threshold) { /* thresholding */
  89.         dvalue = threshold ^ 15; /* yes, so pre-compute dither value */
  90.         do { /* for all source pixels */
  91.             /* pre-compute intensity value for Black */
  92.             Black = ColorInt->colorByte[PCMBLACK];
  93.             ColorInt++; /* bump ptr for next time */
  94.  
  95.             sx = *sxptr++;
  96.  
  97.             /* dither and render pixel */
  98.             do { /* use this pixel 'sx' times */
  99.                 /* if we should render Black */
  100.                 if (Black > dvalue) {
  101.                     /* set bit */
  102.                     *(ptr + (x >> 3)) |= bit_table[x & 7];
  103.                 }
  104.                 ++x; /* done 1 more printer pixel */
  105.             } while (--sx);
  106.         } while (--width);
  107.     }
  108.     else { /* not thresholding, pre-compute ptr to dither matrix */
  109.         dmatrix = PInfo->pi_dmatrix + ((y & 3) << 2);
  110.         do { /* for all source pixels */
  111.             /* pre-compute intensity value for Black */
  112.             Black = ColorInt->colorByte[PCMBLACK];
  113.             ColorInt++; /* bump ptr for next time */
  114.  
  115.             sx = *sxptr++;
  116.  
  117.             /* dither and render pixel */
  118.             do { /* use this pixel 'sx' times */
  119.                 /* if we should render Black */
  120.                 if (Black > dmatrix[x & 3]) {
  121.                     /* set bit */
  122.                     *(ptr + (x >> 3)) |= bit_table[x & 7];
  123.                 }
  124.                 ++x; /* done 1 more printer pixel */
  125.             } while (--sx);
  126.         } while (--width);
  127.     }
  128. }
  129. @
  130.  
  131.  
  132. 1.1
  133. log
  134. @Initial revision
  135. @
  136. text
  137. @d1 3
  138. @
  139.